<div>
    <div class="accordion">
        <div class="accordion-group">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Summary
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.id">
                            <td>vhost.id</td>
                            <td><a href="#/vhosts/{{vhost.id}}">{{vhost.id}}</a></td>
                            <td>Vhost statistic.</td>
                        </tr>
                        <tr ng-show="!vhost.id">
                            <td>vhost.id</td>
                            <td>{{vhost.id}}</td>
                            <td>No clients.</td>
                        </tr>
                        <tr ng-show="vhost.enabled != undefined">
                            <td>vhost.enabled</td>
                            <td>{{vhost.enabled| sc_filter_enabled}}</td>
                            <td>Whether vhost is enabled. Default is {{true| sc_filter_enabled}}</td>
                        </tr>
                        <tr>
                            <td>vhost.name</td>
                            <td>{{vhost.name}}</td>
                            <td>The name of vhost.</td>
                        </tr>
                        <tr ng-show="vhost.chunk_size">
                            <td>vhost.chunk_size</td>
                            <td>{{vhost.chunk_size}}</td>
                            <td>The size of RTMP chunk. Default to global chunk size.</td>
                        </tr>
                        <tr ng-show="vhost.min_latency">
                            <td>vhost.min_latency</td>
                            <td>{{vhost.min_latency| sc_filter_enabled}}</td>
                            <td>Whether low latency enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.tcp_nodelay">
                            <td>vhost.tcp_nodelay</td>
                            <td>{{vhost.tcp_nodelay| sc_filter_enabled}}</td>
                            <td>Whether enable TCP_NODELAY. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.cluster">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Cluster Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.cluster.mode">
                            <td>vhost.cluster.mode</td>
                            <td>{{vhost.cluster.mode}}</td>
                            <td>The type of cluster, local is origin server, remote is edge. Default is local</td>
                        </tr>
                        <tr ng-show="vhost.cluster.origin">
                            <td>vhost.cluster.origin</td>
                            <td>{{vhost.cluster.origin}}</td>
                            <td>For edge, the upstream server address.</td>
                        </tr>
                        <tr ng-show="vhost.cluster.token_traverse != undefined">
                            <td>vhost.cluster.token_traverse</td>
                            <td>{{vhost.cluster.token_traverse| sc_filter_enabled}}</td>
                            <td>For RTMP edge, traverse token to upstream to verify. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.cluster.vhost">
                            <td>vhost.cluster.vhost</td>
                            <td>{{vhost.cluster.vhost}}</td>
                            <td>For edge, the transform vhost to connect to upstream.</td>
                        </tr>
                        <tr ng-show="vhost.cluster.debug_srs_upnode != undefined">
                            <td>vhost.cluster.debug_srs_upnode</td>
                            <td>{{vhost.cluster.debug_srs_upnode| sc_filter_enabled}}</td>
                            <td>For edge, local information to connect to upstream. Default is {{true| sc_filter_enabled}}</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.forward">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Forward Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.forward.enabled != undefined">
                            <td>vhost.forward.enabled</td>
                            <td>{{vhost.forward.enabled| sc_filter_enabled}}</td>
                            <td>Whether enable forward. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.forward.destination">
                            <td>vhost.forward.destination</td>
                            <td>{{vhost.forward.destination}}</td>
                            <td>The server list to forward to.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.play">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Play Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.play.gop_cache != undefined">
                            <td>vhost.play.gop_cache</td>
                            <td>{{vhost.play.gop_cache| sc_filter_enabled}}</td>
                            <td>Whether gop cache is enabled. Default is {{true| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.play.queue_length">
                            <td>vhost.play.queue_length</td>
                            <td>{{vhost.play.queue_length}}</td>
                            <td>The max queue length in seconds. Default is 30</td>
                        </tr>
                        <tr ng-show="vhost.play.time_jitter">
                            <td>vhost.play.time_jitter</td>
                            <td>{{vhost.play.time_jitter}}</td>
                            <td>The time jitter algorithm, can be full, zero or off. Default is full</td>
                        </tr>
                        <tr ng-show="vhost.play.mix_correct != undefined">
                            <td>vhost.play.mix_correct</td>
                            <td>{{vhost.play.mix_correct| sc_filter_enabled}}</td>
                            <td>Whether mix correct is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.play.atc != undefined">
                            <td>vhost.play.atc</td>
                            <td>{{vhost.play.atc| sc_filter_enabled}}</td>
                            <td>Whether atc is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.play.atc_auto != undefined">
                            <td>vhost.play.atc_auto</td>
                            <td>{{vhost.play.atc_auto| sc_filter_enabled}}</td>
                            <td>Whether auto enable atc by metadata. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.play.mw_latency">
                            <td>vhost.play.mw_latency</td>
                            <td>{{vhost.play.mw_latency}}</td>
                            <td>Merge latency in ms. Default is 350</td>
                        </tr>
                        <tr ng-show="vhost.play.send_min_interval">
                            <td>vhost.play.send_min_interval</td>
                            <td>{{vhost.play.send_min_interval}}</td>
                            <td>Send interval in ms for each packet, 0 to disable it. Default is 0</td>
                        </tr>
                        <tr ng-show="vhost.play.reduce_sequence_header != undefined">
                            <td>vhost.play.reduce_sequence_header</td>
                            <td>{{vhost.play.reduce_sequence_header| sc_filter_enabled}}</td>
                            <td>Whether reduce the sequence header. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.publish">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Publish Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.publish.mr != undefined">
                            <td>vhost.publish.mr</td>
                            <td>{{vhost.publish.mr| sc_filter_enabled}}</td>
                            <td>Whether merged read is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.publish.mr_latency">
                            <td>vhost.publish.mr_latency</td>
                            <td>{{vhost.publish.mr_latency}}</td>
                            <td>Merged read latency in ms. Default is 350</td>
                        </tr>
                        <tr ng-show="vhost.publish.firstpkt_timeout">
                            <td>vhost.publish.firstpkt_timeout</td>
                            <td>{{vhost.publish.firstpkt_timeout}}</td>
                            <td>The first packet timeout in ms for publisher. Default is 20000</td>
                        </tr>
                        <tr ng-show="vhost.publish.normal_timeout">
                            <td>vhost.publish.normal_timeout</td>
                            <td>{{vhost.publish.normal_timeout}}</td>
                            <td>The read timeout in ms for publisher. Default is 5000</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.refer || vhost.cluster">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Hotlink Denial Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.refer.enabled != undefined">
                            <td>vhost.refer.enabled</td>
                            <td>{{vhost.refer.enabled| sc_filter_enabled}}</td>
                            <td>Whether referer DRM is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.refer.all">
                            <td>vhost.refer.all</td>
                            <td>{{vhost.refer.all}}</td>
                            <td>The referer for both publisher player.</td>
                        </tr>
                        <tr ng-show="vhost.refer.play">
                            <td>vhost.refer.play</td>
                            <td>{{vhost.refer.play}}</td>
                            <td>The referer for player only.</td>
                        </tr>
                        <tr ng-show="vhost.refer.publish">
                            <td>vhost.refer.publish</td>
                            <td>{{vhost.refer.publish}}</td>
                            <td>The referer for publisher only.</td>
                        </tr>

                        <tr ng-show="vhost.cluster.token_traverse != undefined">
                            <td>vhost.cluster.token_traverse</td>
                            <td>{{vhost.cluster.token_traverse| sc_filter_enabled}}</td>
                            <td>The RTMP edge token tranverse, to verify token by upstream server. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.bandcheck">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Bandcheck Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.bandcheck.enabled != undefined">
                            <td>vhost.bandcheck.enabled</td>
                            <td>{{vhost.bandcheck.enabled| sc_filter_enabled}}</td>
                            <td>Whether bandwidth test is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.bandcheck.key">
                            <td>vhost.bandcheck.key</td>
                            <td>{{vhost.bandcheck.key}}</td>
                            <td>The key for bandwidth test.</td>
                        </tr>
                        <tr ng-show="vhost.bandcheck.interval">
                            <td>vhost.bandcheck.interval</td>
                            <td>{{vhost.bandcheck.interval}}</td>
                            <td>The minimal interval in seconds. Default is 30</td>
                        </tr>
                        <tr ng-show="vhost.bandcheck.limit_kbps">
                            <td>vhost.bandcheck.limit_kbps</td>
                            <td>{{vhost.bandcheck.limit_kbps}}</td>
                            <td>The limit speed in Kbps. Default is 1000</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.security">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Security Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.security.enabled != undefined">
                            <td>vhost.security.enabled</td>
                            <td>{{vhost.security.enabled| sc_filter_enabled}}</td>
                            <td>Whether security is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-repeat="allow in vhost.security.allows">
                            <td>vhost.security.{{allow.action}}</td>
                            <td>{{allow.action}} {{allow.method}} {{allow.entry}}</td>
                            <td>{{allow| sc_filter_security}}</td>
                        </tr>
                        <tr ng-repeat="deny in vhost.security.denies">
                            <td>vhost.security.{{deny.action}}</td>
                            <td>{{deny.action}} {{deny.method}} {{deny.entry}}</td>
                            <td>{{deny| sc_filter_security}}</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.http_static">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost HTTP Static Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.http_static.enabled != undefined">
                            <td>vhost.http_static.enabled</td>
                            <td>{{vhost.http_static.enabled| sc_filter_enabled}}</td>
                            <td>Whether enable HTTP server. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.http_static.mount">
                            <td>vhost.http_static.mount</td>
                            <td>{{vhost.http_static.mount}}</td>
                            <td>The HTTP mount for vhost. Default is [vhost]/</td>
                        </tr>
                        <tr ng-show="vhost.http_static.dir">
                            <td>vhost.http_static.dir</td>
                            <td>{{vhost.http_static.dir}}</td>
                            <td>The HTTP root directory for vhost.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.http_remux">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost HTTP Remux Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.http_remux.enabled != undefined">
                            <td>vhost.http_remux.enabled</td>
                            <td>{{vhost.http_remux.enabled| sc_filter_enabled}}</td>
                            <td>Whether HTTP streaming is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.http_remux.fast_cache">
                            <td>vhost.http_remux.fast_cache</td>
                            <td>{{vhost.http_remux.fast_cache}}</td>
                            <td>The pre cache for HTTP audio streaming, i.e. aac or mp3. Default is 30</td>
                        </tr>
                        <tr ng-show="vhost.http_remux.mount">
                            <td>vhost.http_remux.mount</td>
                            <td>{{vhost.http_remux.mount}}</td>
                            <td>The mount point for HTTP streaming. Default is [vhost]/[app]/[stream].flv</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.http_hooks">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost HTTP Callbacks/Hooks Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.http_hooks.enabled != undefined">
                            <td>vhost.http_hooks.enabled</td>
                            <td>{{vhost.http_hooks.enabled| sc_filter_enabled}}</td>
                            <td>Whether HTTP callback is enabled. Default is {{false| sc_filter_enabled}}。</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_connect">
                            <td>vhost.http_hooks.on_connect</td>
                            <td><span title="{{vhost.http_hooks.on_connect}}">hooks</span></td>
                            <td>The callback for on_connect.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_close">
                            <td>vhost.http_hooks.on_close</td>
                            <td><span title="{{vhost.http_hooks.on_close}}">hooks</span></td>
                            <td>The callback for on_close.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_publish">
                            <td>vhost.http_hooks.on_publish</td>
                            <td><span title="{{vhost.http_hooks.on_publish}}">hooks</span></td>
                            <td>The callback for on_publisher.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_unpublish">
                            <td>vhost.http_hooks.on_unpublish</td>
                            <td><span title="{{vhost.http_hooks.on_unpublish}}">hooks</span></td>
                            <td>The callback for on_unpublish.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_play">
                            <td>vhost.http_hooks.on_play</td>
                            <td><span title="{{vhost.http_hooks.on_play}}">hooks</span></td>
                            <td>The callback for on_play.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_stop">
                            <td>vhost.http_hooks.on_stop</td>
                            <td><span title="{{vhost.http_hooks.on_stop}}">hooks</span></td>
                            <td>The callback for on_stop.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_dvr">
                            <td>vhost.http_hooks.on_dvr</td>
                            <td><span title="{{vhost.http_hooks.on_dvr}}">hooks</span></td>
                            <td>The callback for on_dvr.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_hls">
                            <td>vhost.http_hooks.on_hls</td>
                            <td><span title="{{vhost.http_hooks.on_hls}}">hooks</span></td>
                            <td>The callback for on_hls.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_hls_notify">
                            <td>vhost.http_hooks.on_hls_notify</td>
                            <td><span title="{{vhost.http_hooks.on_hls_notify}}">hooks</span></td>
                            <td>The callback for on_hls_notify.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.exec">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Exec Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.exec.enabled != undefined">
                            <td>vhost.exec.enabled</td>
                            <td>{{vhost.exec.enabled| sc_filter_enabled}}</td>
                            <td>Whether exec is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.exec.publish">
                            <td>vhost.exec.publish</td>
                            <td><span title="{{vhost.exec.publish}}">EXEC</span></td>
                            <td>The exec config.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.hls || vhost.http_hooks">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost HLS Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.hls.enabled != undefined">
                            <td>vhost.hls.enabled</td>
                            <td>{{vhost.hls.enabled| sc_filter_enabled}}</td>
                            <td>Whether HLS is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_fragment">
                            <td>vhost.hls.hls_fragment</td>
                            <td>{{vhost.hls.hls_fragment}}</td>
                            <td>The ts segment length in seconds. Default is 10</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_td_ratio">
                            <td>vhost.hls.hls_td_ratio</td>
                            <td>{{vhost.hls.hls_td_ratio}}</td>
                            <td>The target duration, times hls_fragment. Default is 1.5</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_aof_ratio">
                            <td>vhost.hls.hls_aof_ratio</td>
                            <td>{{vhost.hls.hls_aof_ratio}}</td>
                            <td>The pure audio overflow ratio. Default is 2.0</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_window">
                            <td>vhost.hls.hls_window</td>
                            <td>{{vhost.hls.hls_window}}</td>
                            <td>The ts segment window in seconds. Default is 60</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_on_error">
                            <td>vhost.hls.hls_on_error</td>
                            <td>{{vhost.hls.hls_on_error}}</td>
                            <td>When error, SRS will ignore, disconnect or continue. Default is ignore</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_path">
                            <td>vhost.hls.hls_path</td>
                            <td>{{vhost.hls.hls_path}}</td>
                            <td>The ts segment root directory. Default is ./objs/nginx/html</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_m3u8_file">
                            <td>vhost.hls.hls_m3u8_file</td>
                            <td>{{vhost.hls.hls_m3u8_file}}</td>
                            <td>The m3u8 file path template. Default is [app]/[stream].m3u8</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_ts_file">
                            <td>vhost.hls.hls_ts_file</td>
                            <td>{{vhost.hls.hls_ts_file}}</td>
                            <td>The ts segment file path template. Default is [app]/[stream]-[seq].ts</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_ts_floor != undefined">
                            <td>vhost.hls.hls_ts_floor</td>
                            <td>{{vhost.hls.hls_ts_floor| sc_filter_enabled}}</td>
                            <td>Whether enable ts_floor algorithm. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_entry_prefix">
                            <td>vhost.hls.hls_entry_prefix</td>
                            <td>{{vhost.hls.hls_entry_prefix}}</td>
                            <td>The ts segment prefix.</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_acodec">
                            <td>vhost.hls.hls_acodec</td>
                            <td>{{vhost.hls.hls_acodec}}</td>
                            <td>The default audio codec. Default is aac</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_vcodec">
                            <td>vhost.hls.hls_vcodec</td>
                            <td>{{vhost.hls.hls_vcodec}}</td>
                            <td>The default video codec. Default is h264</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_cleanup != undefined">
                            <td>vhost.hls.hls_cleanup</td>
                            <td>{{vhost.hls.hls_cleanup| sc_filter_enabled}}</td>
                            <td>Whether cleanup ts segments not in window. Default is {{true| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_dispose != undefined">
                            <td>vhost.hls.hls_dispose</td>
                            <td>{{vhost.hls.hls_dispose}}</td>
                            <td>The max timeout in seconds to dispose ts segments when no stream, 0 means never dispose. Default is 0</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_nb_notify">
                            <td>vhost.hls.hls_nb_notify</td>
                            <td>{{vhost.hls.hls_nb_notify}}</td>
                            <td>The max reading size for on_hls_notify. Default is 64</td>
                        </tr>
                        <tr ng-show="vhost.hls.hls_wait_keyframe != undefined">
                            <td>vhost.hls.hls_wait_keyframe</td>
                            <td>{{vhost.hls.hls_wait_keyframe| sc_filter_enabled}}</td>
                            <td>Whether wait keyframe when closing segment. Default is {{true| sc_filter_enabled}}</td>
                        </tr>

                        <tr ng-show="vhost.http_hooks.on_hls">
                            <td>vhost.http_hooks.on_hls</td>
                            <td><span title="{{vhost.http_hooks.on_hls}}">hooks</span></td>
                            <td>The HTTP callback for on_hls.</td>
                        </tr>
                        <tr ng-show="vhost.http_hooks.on_hls_notify">
                            <td>vhost.http_hooks.on_hls_notify</td>
                            <td><span title="{{vhost.http_hooks.on_hls_notify}}">hooks</span></td>
                            <td>The HTTP callback for on_hls_notify, to pre cache HLS.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.hds">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost HDS Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.hds.enabled != undefined">
                            <td>vhost.hds.enabled</td>
                            <td>{{vhost.hds.enabled| sc_filter_enabled}}</td>
                            <td>Whether HDS is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.hds.hds_fragment">
                            <td>vhost.hds.hds_fragment</td>
                            <td>{{vhost.hds.hds_fragment}}</td>
                            <td>The f4v segment length in seconds. Default is 10</td>
                        </tr>
                        <tr ng-show="vhost.hds.hds_window">
                            <td>vhost.hds.hds_window</td>
                            <td>{{vhost.hds.hds_window}}</td>
                            <td>The f4v segment window in seconds. Default is 60</td>
                        </tr>
                        <tr ng-show="vhost.hds.hds_path">
                            <td>vhost.hds.hds_path</td>
                            <td>{{vhost.hds.hds_path}}</td>
                            <td>The HDS root directory. Default is ./objs/nginx/html</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-show="vhost.dvr || vhost.http_hooks">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost DVR Config
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="vhost.dvr.enabled != undefined">
                            <td>vhost.dvr.enabled</td>
                            <td>{{vhost.dvr.enabled| sc_filter_enabled}}</td>
                            <td>Whether DVR is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.dvr.dvr_plan">
                            <td>vhost.dvr.dvr_plan</td>
                            <td>{{vhost.dvr.dvr_plan}}</td>
                            <td>The record plan, can be session, segment or append. Default is session</td>
                        </tr>
                        <tr ng-show="vhost.dvr.dvr_apply">
                            <td>vhost.dvr.dvr_apply</td>
                            <td><span title="{{vhost.dvr.dvr_apply}}">Filters</span></td>
                            <td>The DVR plan apply to, all or app/stream. Default is all</td>
                        </tr>
                        <tr ng-show="vhost.dvr.dvr_path">
                            <td>vhost.dvr.dvr_path</td>
                            <td><span title="{{vhost.dvr.dvr_path}}">PATH</span></td>
                            <td>The DVR file path template. Default is ./objs/nginx/html/[app]/[stream].[timestamp].flv</td>
                        </tr>
                        <tr ng-show="vhost.dvr.dvr_duration">
                            <td>vhost.dvr.dvr_duration</td>
                            <td>{{vhost.dvr.dvr_duration}}</td>
                            <td>The record segment duration in seconds. Default is 30</td>
                        </tr>
                        <tr ng-show="vhost.dvr.dvr_wait_keyframe != undefined">
                            <td>vhost.dvr.dvr_wait_keyframe</td>
                            <td>{{vhost.dvr.dvr_wait_keyframe| sc_filter_enabled}}</td>
                            <td>Whether wait for keyframe when closing record file. Default is {{true| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="vhost.dvr.time_jitter">
                            <td>vhost.dvr.time_jitter</td>
                            <td>{{vhost.dvr.time_jitter}}</td>
                            <td>The time jitter algorithm for DVR, can be full, zero or off. Default is full</td>
                        </tr>

                        <tr ng-show="vhost.http_hooks.on_dvr">
                            <td>vhost.http_hooks.on_dvr</td>
                            <td><span title="{{vhost.http_hooks.on_dvr}}">hooks</span></td>
                            <td>The HTTP callback for on_dvr.</td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-repeat="ingest in vhost.ingests">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Ingest Config, id={{ingest.id}}
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="ingest.enabled != undefined">
                            <td>ingest.enabled</td>
                            <td>{{ingest.enabled| sc_filter_enabled}}</td>
                            <td>Whether ingest is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="ingest.input.type">
                            <td>ingest.input.type</td>
                            <td>{{ingest.input.type}}</td>
                            <td>The ingest type, can be file or stream. Default is file</td>
                        </tr>
                        <tr ng-show="ingest.input.url">
                            <td>ingest.input.url</td>
                            <td><span title="{{ingest.input.url}}">URL</span></td>
                            <td>The url of ingest file or stream.</td>
                        </tr>
                    </table>
                    <div class="accordion-group" ng-repeat="engine in [ingest.engine]">
                        <div class="accordion-heading" sc-collapse="in">
                            <a class="accordion-toggle" href="javascript:void(0)">
                                Ingest Engine Config, <span ng-show="engine.id">id={{engine.id}}</span>
                            </a>
                        </div>
                        <div class="accordion-body collapse">
                            <div class="accordion-inner">
                                <table class="table table-striped table-hover table-bordered">
                                    <tr>
                                        <th>Key</th>
                                        <th>Value</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr ng-show="engine.enabled != undefined">
                                        <td>engine.enabled</td>
                                        <td>{{engine.enabled| sc_filter_enabled}}</td>
                                        <td>Whether transcode is enabled. Default is {{false| sc_filter_enabled}}</td>
                                    </tr>
                                    <tr ng-show="engine.iformat">
                                        <td>engine.iformat</td>
                                        <td>{{engine.iformat}}</td>
                                        <td>The input format, ffmpeg params "-i v". Default is flv</td>
                                    </tr>
                                    <tr ng-show="engine.vfilter">
                                        <td>engine.vfilter</td>
                                        <td><p ng-repeat="(fk, fv) in engine.vfilter">-{{fk}} {{fv}}</p></td>
                                        <td>The video param, ffmpeg params between "-i" and "-vcodec".</td>
                                    </tr>
                                    <tr ng-show="engine.vcodec">
                                        <td>engine.vcodec</td>
                                        <td>{{engine.vcodec}}</td>
                                        <td>The video codec, ffmpeg params "-vcodec v", can be libx264, copy or vn.</td>
                                    </tr>
                                    <tr ng-show="engine.vbitrate">
                                        <td>engine.vbitrate</td>
                                        <td>{{engine.vbitrate}}</td>
                                        <td>The video bitrate in Kbps, ffmpeg params "-v:b v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vfps">
                                        <td>engine.vfps</td>
                                        <td>{{engine.vfps}}</td>
                                        <td>The video fps, ffmpeg params "-r v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vwidth">
                                        <td>engine.vwidth</td>
                                        <td>{{engine.vwidth}}</td>
                                        <td>The video width in px, ffmpeg params "-s v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vheight">
                                        <td>engine.vheight</td>
                                        <td>{{engine.vheight}}</td>
                                        <td>The video height in px, ffmpeg params "-s v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vthreads">
                                        <td>engine.vthreads</td>
                                        <td>{{engine.vthreads}}</td>
                                        <td>The encode threads, ffmpeg params "-thread v". Default is 1</td>
                                    </tr>
                                    <tr ng-show="engine.vprofile">
                                        <td>engine.vprofile</td>
                                        <td>{{engine.vprofile}}</td>
                                        <td>The video profile, ffmpeg params "-profile:v v", can be high, main or baseline.</td>
                                    </tr>
                                    <tr ng-show="engine.vpreset">
                                        <td>engine.vpreset</td>
                                        <td>{{engine.vpreset}}</td>
                                        <td>The video preset, ffmpeg params "-preset v", can be medium, slow, slower, veryslow or placebo</td>
                                    </tr>
                                    <tr ng-show="engine.vparams">
                                        <td>engine.vparams</td>
                                        <td><p ng-repeat="(fk, fv) in engine.vparams">-{{fk}} {{fv}}</p></td>
                                        <td>The video transcode params, between ffmpeg params "-vpreset" and "-acodec".</td>
                                    </tr>
                                    <tr ng-show="engine.acodec">
                                        <td>engine.acodec</td>
                                        <td>{{engine.acodec}}</td>
                                        <td>The audio encoder, ffmpeg params "-acodec v", can be libfdk_aac, copy or an</td>
                                    </tr>
                                    <tr ng-show="engine.abitrate">
                                        <td>engine.abitrate</td>
                                        <td>{{engine.abitrate}}</td>
                                        <td>The audio bitrate in Kbps, ffmepg params "-b:a v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.asample_rate">
                                        <td>engine.asample_rate</td>
                                        <td>{{engine.asample_rate}}</td>
                                        <td>The audio sample rate, ffmpeg params "-ar v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.achannels">
                                        <td>engine.achannels</td>
                                        <td>{{engine.achannels}}</td>
                                        <td>The audio channel count, ffmpeg params "-ac v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.aparams">
                                        <td>engine.aparams</td>
                                        <td><p ng-repeat="(fk, fv) in engine.aparams">-{{fk}} {{fv}}</p></td>
                                        <td>The audio transcode params, between ffmpeg params "-ac" and "-f"/"-y"</td>
                                    </tr>
                                    <tr ng-show="engine.oformat">
                                        <td>engine.oformat</td>
                                        <td>{{engine.oformat}}</td>
                                        <td>The output format. Default is flv</td>
                                    </tr>
                                    <tr ng-show="engine.output">
                                        <td>engine.output</td>
                                        <td><span title="{{engine.output}}">URL</span></td>
                                        <td>The output url, which may include variables [vhost], [port], [app], [stream]<span ng-show="engine.id">, [engine]</span></td>
                                    </tr>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="accordion-group" ng-repeat="transcode in vhost.transcodes">
            <div class="accordion-heading" sc-collapse="in">
                <a class="accordion-toggle" href="javascript:void(0)">
                    Vhost Transcode Config, apply={{transcode.apply? transcode.apply:"vhost"}}
                </a>
            </div>
            <div class="accordion-body collapse">
                <div class="accordion-inner">
                    <table class="table table-striped table-hover table-bordered">
                        <tr>
                            <th>Key</th>
                            <th>Value</th>
                            <th>Description</th>
                        </tr>
                        <tr ng-show="transcode.enabled != undefined">
                            <td>transcode.enabled</td>
                            <td>{{transcode.enabled| sc_filter_enabled}}</td>
                            <td>Whether transcode is enabled. Default is {{false| sc_filter_enabled}}</td>
                        </tr>
                        <tr ng-show="transcode.ffmpeg">
                            <td>transcode.ffmpeg</td>
                            <td><span title="{{transcode.ffmpeg}}">{{transcode.ffmpeg}}</span></td>
                            <td>The binary path of encoder.</td>
                        </tr>
                    </table>
                    <div class="accordion-group" ng-repeat="engine in transcode.engines">
                        <div class="accordion-heading" sc-collapse="in">
                            <a class="accordion-toggle" href="javascript:void(0)">
                                Transcode Engine Config, <span ng-show="engine.id">id={{engine.id}}</span>
                            </a>
                        </div>
                        <div class="accordion-body collapse">
                            <div class="accordion-inner">
                                <table class="table table-striped table-hover table-bordered">
                                    <tr>
                                        <th>Key</th>
                                        <th>Value</th>
                                        <th>Description</th>
                                    </tr>
                                    <tr ng-show="engine.enabled != undefined">
                                        <td>engine.enabled</td>
                                        <td>{{engine.enabled| sc_filter_enabled}}</td>
                                        <td>Whether transcode is enabled. Default is {{false| sc_filter_enabled}}</td>
                                    </tr>
                                    <tr ng-show="engine.iformat">
                                        <td>engine.iformat</td>
                                        <td>{{engine.iformat}}</td>
                                        <td>The input format, ffmpeg params "-i v". Default is flv</td>
                                    </tr>
                                    <tr ng-show="engine.vfilter">
                                        <td>engine.vfilter</td>
                                        <td><p ng-repeat="(fk, fv) in engine.vfilter">-{{fk}} {{fv}}</p></td>
                                        <td>The video param, ffmpeg params between "-i" and "-vcodec".</td>
                                    </tr>
                                    <tr ng-show="engine.vcodec">
                                        <td>engine.vcodec</td>
                                        <td>{{engine.vcodec}}</td>
                                        <td>The video codec, ffmpeg params "-vcodec v", can be libx264, copy or vn.</td>
                                    </tr>
                                    <tr ng-show="engine.vbitrate">
                                        <td>engine.vbitrate</td>
                                        <td>{{engine.vbitrate}}</td>
                                        <td>The video bitrate in Kbps, ffmpeg params "-v:b v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vfps">
                                        <td>engine.vfps</td>
                                        <td>{{engine.vfps}}</td>
                                        <td>The video fps, ffmpeg params "-r v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vwidth">
                                        <td>engine.vwidth</td>
                                        <td>{{engine.vwidth}}</td>
                                        <td>The video width in px, ffmpeg params "-s v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vheight">
                                        <td>engine.vheight</td>
                                        <td>{{engine.vheight}}</td>
                                        <td>The video height in px, ffmpeg params "-s v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.vthreads">
                                        <td>engine.vthreads</td>
                                        <td>{{engine.vthreads}}</td>
                                        <td>The encode threads, ffmpeg params "-thread v". Default is 1</td>
                                    </tr>
                                    <tr ng-show="engine.vprofile">
                                        <td>engine.vprofile</td>
                                        <td>{{engine.vprofile}}</td>
                                        <td>The video profile, ffmpeg params "-profile:v v", can be high, main or baseline.</td>
                                    </tr>
                                    <tr ng-show="engine.vpreset">
                                        <td>engine.vpreset</td>
                                        <td>{{engine.vpreset}}</td>
                                        <td>The video preset, ffmpeg params "-preset v", can be medium, slow, slower, veryslow or placebo</td>
                                    </tr>
                                    <tr ng-show="engine.vparams">
                                        <td>engine.vparams</td>
                                        <td><p ng-repeat="(fk, fv) in engine.vparams">-{{fk}} {{fv}}</p></td>
                                        <td>The video transcode params, between ffmpeg params "-vpreset" and "-acodec".</td>
                                    </tr>
                                    <tr ng-show="engine.acodec">
                                        <td>engine.acodec</td>
                                        <td>{{engine.acodec}}</td>
                                        <td>The audio encoder, ffmpeg params "-acodec v", can be libfdk_aac, copy or an</td>
                                    </tr>
                                    <tr ng-show="engine.abitrate">
                                        <td>engine.abitrate</td>
                                        <td>{{engine.abitrate}}</td>
                                        <td>The audio bitrate in Kbps, ffmepg params "-b:a v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.asample_rate">
                                        <td>engine.asample_rate</td>
                                        <td>{{engine.asample_rate}}</td>
                                        <td>The audio sample rate, ffmpeg params "-ar v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.achannels">
                                        <td>engine.achannels</td>
                                        <td>{{engine.achannels}}</td>
                                        <td>The audio channel count, ffmpeg params "-ac v", 0 to follow source. Default is 0</td>
                                    </tr>
                                    <tr ng-show="engine.aparams">
                                        <td>engine.aparams</td>
                                        <td><p ng-repeat="(fk, fv) in engine.aparams">-{{fk}} {{fv}}</p></td>
                                        <td>The audio transcode params, between ffmpeg params "-ac" and "-f"/"-y"</td>
                                    </tr>
                                    <tr ng-show="engine.oformat">
                                        <td>engine.oformat</td>
                                        <td>{{engine.oformat}}</td>
                                        <td>The output format. Default is flv</td>
                                    </tr>
                                    <tr ng-show="engine.output">
                                        <td>engine.output</td>
                                        <td><span title="{{engine.output}}">URL</span></td>
                                        <td>The output url, which may include variables [vhost], [port], [app], [stream]<span ng-show="engine.id">, [engine]</span></td>
                                    </tr>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>